Computers enable people to perform many types of activities more easily than what can be performed manually. Examples of these activities include but are not limited to typing documents, billing, storing and correlating information in databases, obtaining driving directions, searching for and purchasing items of interest. Many applications have been developed to enable people to perform these activities by executing the applications on one or more computers. Problems can occur as the code associated with the applications executes. Examples of problems that can occur include an inability to obtain storage, an inability for one computer to communicate with another computer, and an unauthorized person modifying code associated with an application, among other things.
Frequently, technical people who work for the companies that sell the applications have to determine what caused the problem. Conventional applications frequently provide no information about a problem. When information about a problem is provided, the provided information is frequently inadequate.
For example, the application may provide a single error code when a certain type of problem occurs. One error code, such as 123, may be provided whenever storage could not be obtained and another error code, such as 124, may be provided when one computer is unable to communicate with another computer. However, an application may attempt to obtain storage or to communicate with another computer in many different places.
In another example, information about stack based crashes is provided. However, this technique only provides information about operating system problems that resulted in a stack crash. No information is provided about problems that occurred in applications or non-stack based operating system problems.
In yet another example, software that executes on a computer can include invocations to a log facility. When the invocation is executed, a log is written to the log facility. These invocations may be placed, among other things, at the entry and exit of portions of code. Invocations of a log facility for example at the entry and exit of portions of code are frequently known as “full code path logging.” Examples of portions of code include but are not limited to methods, procedures, functions, and blocks of code associated with condition statements. Examples of condition statements include, but are not limited to, if statements, else statements, case statements and when clauses. However, full code path logging results in a tremendous amount of information being written, which requires a large amount of storage and uses a large percentage of the central processing unit's (CPU's) cycles. Therefore, full code path logging is disabled during normal operations. Full code path logging is enabled after a problem has occurred and attempts are made to recreate the problem so that information about the execution path that resulted in the problem can be obtained.
As can be seen, single error code technique provides an inadequate amount of information. Stack crash and full code path logging may result in no information for certain types of problems. Further, frequently no information is provided for what is known as “soft errors” where an application can continue to execute after the error.